---
title: 什么是服务容错？
description: 降级熔断、流量整形等
---


说到高可用，不得不提到集群化。通过搭建服务集群来避免单点故障（以及故障恢复）确实是保障高可用的常规操作。但是仅仅搭建集群，在面对高可用杀手”服务雪崩“时，即便是集群也会显得脆弱无力。


:::tip
服务雪崩是指由于一个服务的故障和延迟，导致其它服务也相继出现故障和延迟的现象。如果不能得到有效处理，会团灭整个系统的上下游服务。
:::

## Sentinel 服务容错的思路

就拿服务雪崩这种极端场景来说，这种极端场景发生的主要原因有两个，一个是**外部的高并发流量导致请求数量增多**，超过了集群的吞吐量，另一个是**内部各种异常导致的接口响应超时**。

所以可以通过 内部异常治理 和外部流量控制的思路解决服务稳定性的问题。

### 内部异常治理
在 Sentinel 中，可以采用 **降级** 和 **熔断**的方式处理内部的异常。

所谓降级，是指当服务调用发生了响应超时、服务异常等情况时，我们在服务内部执行一段降级逻辑。



![3f4061e79599f9fba6c65d90b839c184](https://img.wkq.pub/pic/3f4061e79599f9fba6c65d90b839c184.webp)



在降级逻辑中，可以选择静默处理，即忽略掉异常继续执行后续逻辑；或者返回一个让业务可以继续执行下去的默认结果；又或者，在降级逻辑中尝试重试、或者恢复异常服务。降级针对的是单次**服务调用异常**而执行的处理逻辑。

而所谓**熔断**，是指当异常调用量达到一定的判定条件，比如在异常降级和满调用请求的比例达到一个阈值、窗口时间内降级请求达到一定数量的情况下，微服务在一段时间内停止对目标服务发起调用，所有来访请求全部执行降级逻辑。所以，熔断是**多次服务调用异常**累积的结果。

![4cyy9da258aef17aba76a749216d045e](https://img.wkq.pub/pic/4cyy9da258aef17aba76a749216d045e.webp)

当服务进入熔断状态后，当前服务对下游服务的调用行为也就终止了，这样一来就大大降低了下游服务的访问压力。

### 外部流量控制

限流是流量整形 / 流控方案的一种。在 Sentinel 中我们可以根据集群的处理能力，为每个服务设置一个限流规则，从 QPS 维度或者并发线程数的维度控制外部的访问流量。一旦访问量超过阈值，后续的请求就会被 fast fail，这是最常用的一种限流手段。但 Sentinel 所支持的方案不止这一种。

从流量整形的效果来说，除了快速失败，我们还可以在 Sentinel 中选择预热模型和排队模型。

预热模型就是在一段规定的预热时间窗口内，从低到高逐渐拉高流量阈值，直到达到预设的最高阈值为止。

而对于排队模型来说，如果访问量超过了设定的阈值，服务请求不回被立即失败，而是被放入一个队列中等待，如果服务请求在预设的超时时间内仍未被处理，那么就会被移出队列。



限流是挡在降级熔断前的一道关卡，是投入产出比最高的防护措施。



